From 98b39ce91176f58eb9abc214f3ef1a6889b7f674 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 7 Oct 2013 00:05:21 -0400 Subject: [PATCH] Add a flow box example to gtk-demo --- demos/gtk-demo/Makefile.am | 1 + demos/gtk-demo/demo.gresource.xml | 1 + demos/gtk-demo/flowbox.c | 743 ++++++++++++++++++++++++++++++ 3 files changed, 745 insertions(+) create mode 100644 demos/gtk-demo/flowbox.c diff --git a/demos/gtk-demo/Makefile.am b/demos/gtk-demo/Makefile.am index 101071fc69..ec2b21d493 100644 --- a/demos/gtk-demo/Makefile.am +++ b/demos/gtk-demo/Makefile.am @@ -30,6 +30,7 @@ demos = \ infobar.c \ links.c \ listbox.c \ + flowbox.c \ list_store.c \ menus.c \ offscreen_window.c \ diff --git a/demos/gtk-demo/demo.gresource.xml b/demos/gtk-demo/demo.gresource.xml index 1a32586523..9b38c527d5 100644 --- a/demos/gtk-demo/demo.gresource.xml +++ b/demos/gtk-demo/demo.gresource.xml @@ -95,6 +95,7 @@ entry_buffer.c entry_completion.c expander.c + flowbox.c hypertext.c iconview.c iconview_edit.c diff --git a/demos/gtk-demo/flowbox.c b/demos/gtk-demo/flowbox.c new file mode 100644 index 0000000000..c0d921735d --- /dev/null +++ b/demos/gtk-demo/flowbox.c @@ -0,0 +1,743 @@ +/* Flow Box + * + * GtkFlowBox allows flexible and responsive grids which reflow + * as needed and support sorting and filtering. + * + * The children of a GtkFlowBox are regular widgets + */ + +#include +#include +#include + +static GtkWidget *window = NULL; + +static GtkWidget * +color_swatch_new (const gchar *color) +{ + GtkWidget *button, *area; + GdkRGBA rgba; + + gdk_rgba_parse (&rgba, color); + + button = gtk_button_new (); + area = gtk_drawing_area_new (); + gtk_widget_set_size_request (area, 24, 24); + gtk_widget_override_background_color (area, 0, &rgba); + gtk_container_add (GTK_CONTAINER (button), area); + gtk_widget_show_all (button); + + return button; +} + +GtkWidget * +do_flowbox (GtkWidget *do_widget) +{ + GtkWidget *scrolled, *flowbox; + const gchar *colors[] = { + "AliceBlue", + "AntiqueWhite", + "AntiqueWhite1", + "AntiqueWhite2", + "AntiqueWhite3", + "AntiqueWhite4", + "aqua", + "aquamarine", + "aquamarine1", + "aquamarine2", + "aquamarine3", + "aquamarine4", + "azure", + "azure1", + "azure2", + "azure3", + "azure4", + "beige", + "bisque", + "bisque1", + "bisque2", + "bisque3", + "bisque4", + "black", + "BlanchedAlmond", + "blue", + "blue1", + "blue2", + "blue3", + "blue4", + "BlueViolet", + "brown", + "brown1", + "brown2", + "brown3", + "brown4", + "burlywood", + "burlywood1", + "burlywood2", + "burlywood3", + "burlywood4", + "CadetBlue", + "CadetBlue1", + "CadetBlue2", + "CadetBlue3", + "CadetBlue4", + "chartreuse", + "chartreuse1", + "chartreuse2", + "chartreuse3", + "chartreuse4", + "chocolate", + "chocolate1", + "chocolate2", + "chocolate3", + "chocolate4", + "coral", + "coral1", + "coral2", + "coral3", + "coral4", + "CornflowerBlue", + "cornsilk", + "cornsilk1", + "cornsilk2", + "cornsilk3", + "cornsilk4", + "crimson", + "cyan", + "cyan1", + "cyan2", + "cyan3", + "cyan4", + "DarkBlue", + "DarkCyan", + "DarkGoldenrod", + "DarkGoldenrod1", + "DarkGoldenrod2", + "DarkGoldenrod3", + "DarkGoldenrod4", + "DarkGray", + "DarkGreen", + "DarkGrey", + "DarkKhaki", + "DarkMagenta", + "DarkOliveGreen", + "DarkOliveGreen1", + "DarkOliveGreen2", + "DarkOliveGreen3", + "DarkOliveGreen4", + "DarkOrange", + "DarkOrange1", + "DarkOrange2", + "DarkOrange3", + "DarkOrange4", + "DarkOrchid", + "DarkOrchid1", + "DarkOrchid2", + "DarkOrchid3", + "DarkOrchid4", + "DarkRed", + "DarkSalmon", + "DarkSeaGreen", + "DarkSeaGreen1", + "DarkSeaGreen2", + "DarkSeaGreen3", + "DarkSeaGreen4", + "DarkSlateBlue", + "DarkSlateGray", + "DarkSlateGray1", + "DarkSlateGray2", + "DarkSlateGray3", + "DarkSlateGray4", + "DarkSlateGrey", + "DarkTurquoise", + "DarkViolet", + "DeepPink", + "DeepPink1", + "DeepPink2", + "DeepPink3", + "DeepPink4", + "DeepSkyBlue", + "DeepSkyBlue1", + "DeepSkyBlue2", + "DeepSkyBlue3", + "DeepSkyBlue4", + "DimGray", + "DimGrey", + "DodgerBlue", + "DodgerBlue1", + "DodgerBlue2", + "DodgerBlue3", + "DodgerBlue4", + "firebrick", + "firebrick1", + "firebrick2", + "firebrick3", + "firebrick4", + "FloralWhite", + "ForestGreen", + "fuchsia", + "gainsboro", + "GhostWhite", + "gold", + "gold1", + "gold2", + "gold3", + "gold4", + "goldenrod", + "goldenrod1", + "goldenrod2", + "goldenrod3", + "goldenrod4", + "gray", + "gray0", + "gray1", + "gray10", + "gray100", + "gray11", + "gray12", + "gray13", + "gray14", + "gray15", + "gray16", + "gray17", + "gray18", + "gray19", + "gray2", + "gray20", + "gray21", + "gray22", + "gray23", + "gray24", + "gray25", + "gray26", + "gray27", + "gray28", + "gray29", + "gray3", + "gray30", + "gray31", + "gray32", + "gray33", + "gray34", + "gray35", + "gray36", + "gray37", + "gray38", + "gray39", + "gray4", + "gray40", + "gray41", + "gray42", + "gray43", + "gray44", + "gray45", + "gray46", + "gray47", + "gray48", + "gray49", + "gray5", + "gray50", + "gray51", + "gray52", + "gray53", + "gray54", + "gray55", + "gray56", + "gray57", + "gray58", + "gray59", + "gray6", + "gray60", + "gray61", + "gray62", + "gray63", + "gray64", + "gray65", + "gray66", + "gray67", + "gray68", + "gray69", + "gray7", + "gray70", + "gray71", + "gray72", + "gray73", + "gray74", + "gray75", + "gray76", + "gray77", + "gray78", + "gray79", + "gray8", + "gray80", + "gray81", + "gray82", + "gray83", + "gray84", + "gray85", + "gray86", + "gray87", + "gray88", + "gray89", + "gray9", + "gray90", + "gray91", + "gray92", + "gray93", + "gray94", + "gray95", + "gray96", + "gray97", + "gray98", + "gray99", + "green", + "green1", + "green2", + "green3", + "green4", + "GreenYellow", + "grey", + "grey0", + "grey1", + "grey10", + "grey100", + "grey11", + "grey12", + "grey13", + "grey14", + "grey15", + "grey16", + "grey17", + "grey18", + "grey19", + "grey2", + "grey20", + "grey21", + "grey22", + "grey23", + "grey24", + "grey25", + "grey26", + "grey27", + "grey28", + "grey29", + "grey3", + "grey30", + "grey31", + "grey32", + "grey33", + "grey34", + "grey35", + "grey36", + "grey37", + "grey38", + "grey39", + "grey4", + "grey40", + "grey41", + "grey42", + "grey43", + "grey44", + "grey45", + "grey46", + "grey47", + "grey48", + "grey49", + "grey5", + "grey50", + "grey51", + "grey52", + "grey53", + "grey54", + "grey55", + "grey56", + "grey57", + "grey58", + "grey59", + "grey6", + "grey60", + "grey61", + "grey62", + "grey63", + "grey64", + "grey65", + "grey66", + "grey67", + "grey68", + "grey69", + "grey7", + "grey70", + "grey71", + "grey72", + "grey73", + "grey74", + "grey75", + "grey76", + "grey77", + "grey78", + "grey79", + "grey8", + "grey80", + "grey81", + "grey82", + "grey83", + "grey84", + "grey85", + "grey86", + "grey87", + "grey88", + "grey89", + "grey9", + "grey90", + "grey91", + "grey92", + "grey93", + "grey94", + "grey95", + "grey96", + "grey97", + "grey98", + "grey99", + "honeydew", + "honeydew1", + "honeydew2", + "honeydew3", + "honeydew4", + "HotPink", + "HotPink1", + "HotPink2", + "HotPink3", + "HotPink4", + "IndianRed", + "IndianRed1", + "IndianRed2", + "IndianRed3", + "IndianRed4", + "indigo", + "ivory", + "ivory1", + "ivory2", + "ivory3", + "ivory4", + "khaki", + "khaki1", + "khaki2", + "khaki3", + "khaki4", + "lavender", + "LavenderBlush", + "LavenderBlush1", + "LavenderBlush2", + "LavenderBlush3", + "LavenderBlush4", + "LawnGreen", + "LemonChiffon", + "LemonChiffon1", + "LemonChiffon2", + "LemonChiffon3", + "LemonChiffon4", + "LightBlue", + "LightBlue1", + "LightBlue2", + "LightBlue3", + "LightBlue4", + "LightCoral", + "LightCyan", + "LightCyan1", + "LightCyan2", + "LightCyan3", + "LightCyan4", + "LightGoldenrod", + "LightGoldenrod1", + "LightGoldenrod2", + "LightGoldenrod3", + "LightGoldenrod4", + "LightGoldenrodYellow", + "LightGray", + "LightGreen", + "LightGrey", + "LightPink", + "LightPink1", + "LightPink2", + "LightPink3", + "LightPink4", + "LightSalmon", + "LightSalmon1", + "LightSalmon2", + "LightSalmon3", + "LightSalmon4", + "LightSeaGreen", + "LightSkyBlue", + "LightSkyBlue1", + "LightSkyBlue2", + "LightSkyBlue3", + "LightSkyBlue4", + "LightSlateBlue", + "LightSlateGray", + "LightSlateGrey", + "LightSteelBlue", + "LightSteelBlue1", + "LightSteelBlue2", + "LightSteelBlue3", + "LightSteelBlue4", + "LightYellow", + "LightYellow1", + "LightYellow2", + "LightYellow3", + "LightYellow4", + "lime", + "LimeGreen", + "linen", + "magenta", + "magenta1", + "magenta2", + "magenta3", + "magenta4", + "maroon", + "maroon1", + "maroon2", + "maroon3", + "maroon4", + "MediumAquamarine", + "MediumBlue", + "MediumOrchid", + "MediumOrchid1", + "MediumOrchid2", + "MediumOrchid3", + "MediumOrchid4", + "MediumPurple", + "MediumPurple1", + "MediumPurple2", + "MediumPurple3", + "MediumPurple4", + "MediumSeaGreen", + "MediumSlateBlue", + "MediumSpringGreen", + "MediumTurquoise", + "MediumVioletRed", + "MidnightBlue", + "MintCream", + "MistyRose", + "MistyRose1", + "MistyRose2", + "MistyRose3", + "MistyRose4", + "moccasin", + "NavajoWhite", + "NavajoWhite1", + "NavajoWhite2", + "NavajoWhite3", + "NavajoWhite4", + "navy", + "NavyBlue", + "OldLace", + "olive", + "OliveDrab", + "OliveDrab1", + "OliveDrab2", + "OliveDrab3", + "OliveDrab4", + "orange", + "orange1", + "orange2", + "orange3", + "orange4", + "OrangeRed", + "OrangeRed1", + "OrangeRed2", + "OrangeRed3", + "OrangeRed4", + "orchid", + "orchid1", + "orchid2", + "orchid3", + "orchid4", + "PaleGoldenrod", + "PaleGreen", + "PaleGreen1", + "PaleGreen2", + "PaleGreen3", + "PaleGreen4", + "PaleTurquoise", + "PaleTurquoise1", + "PaleTurquoise2", + "PaleTurquoise3", + "PaleTurquoise4", + "PaleVioletRed", + "PaleVioletRed1", + "PaleVioletRed2", + "PaleVioletRed3", + "PaleVioletRed4", + "PapayaWhip", + "PeachPuff", + "PeachPuff1", + "PeachPuff2", + "PeachPuff3", + "PeachPuff4", + "peru", + "pink", + "pink1", + "pink2", + "pink3", + "pink4", + "plum", + "plum1", + "plum2", + "plum3", + "plum4", + "PowderBlue", + "purple", + "purple1", + "purple2", + "purple3", + "purple4", + "red", + "red1", + "red2", + "red3", + "red4", + "RosyBrown", + "RosyBrown1", + "RosyBrown2", + "RosyBrown3", + "RosyBrown4", + "RoyalBlue", + "RoyalBlue1", + "RoyalBlue2", + "RoyalBlue3", + "RoyalBlue4", + "SaddleBrown", + "salmon", + "salmon1", + "salmon2", + "salmon3", + "salmon4", + "SandyBrown", + "SeaGreen", + "SeaGreen1", + "SeaGreen2", + "SeaGreen3", + "SeaGreen4", + "seashell", + "seashell1", + "seashell2", + "seashell3", + "seashell4", + "sienna", + "sienna1", + "sienna2", + "sienna3", + "sienna4", + "silver", + "SkyBlue", + "SkyBlue1", + "SkyBlue2", + "SkyBlue3", + "SkyBlue4", + "SlateBlue", + "SlateBlue1", + "SlateBlue2", + "SlateBlue3", + "SlateBlue4", + "SlateGray", + "SlateGray1", + "SlateGray2", + "SlateGray3", + "SlateGray4", + "SlateGrey", + "snow", + "snow1", + "snow2", + "snow3", + "snow4", + "SpringGreen", + "SpringGreen1", + "SpringGreen2", + "SpringGreen3", + "SpringGreen4", + "SteelBlue", + "SteelBlue1", + "SteelBlue2", + "SteelBlue3", + "SteelBlue4", + "tan", + "tan1", + "tan2", + "tan3", + "tan4", + "teal", + "thistle", + "thistle1", + "thistle2", + "thistle3", + "thistle4", + "tomato", + "tomato1", + "tomato2", + "tomato3", + "tomato4", + "turquoise", + "turquoise1", + "turquoise2", + "turquoise3", + "turquoise4", + "violet", + "VioletRed", + "VioletRed1", + "VioletRed2", + "VioletRed3", + "VioletRed4", + "wheat", + "wheat1", + "wheat2", + "wheat3", + "wheat4", + "white", + "WhiteSmoke", + "yellow", + "yellow1", + "yellow2", + "yellow3", + "yellow4", + "YellowGreen", + NULL + }; + gint i; + + if (!window) + { + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_screen (GTK_WINDOW (window), + gtk_widget_get_screen (do_widget)); + gtk_window_set_title (GTK_WINDOW (window), "Flow Box"); + gtk_window_set_default_size (GTK_WINDOW (window), 400, 600); + + g_signal_connect (window, "destroy", + G_CALLBACK (gtk_widget_destroyed), + &window); + + scrolled = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + flowbox = gtk_flow_box_new (); + gtk_widget_set_valign (flowbox, GTK_ALIGN_START); + gtk_flow_box_set_max_children_per_line (GTK_FLOW_BOX (flowbox), 30); + gtk_flow_box_set_selection_mode (GTK_FLOW_BOX (flowbox), GTK_SELECTION_NONE); + + gtk_container_add (GTK_CONTAINER (scrolled), flowbox); + gtk_container_add (GTK_CONTAINER (window), scrolled); + + for (i = 0; colors[i]; i++) + { + gtk_container_add (GTK_CONTAINER (flowbox), color_swatch_new (colors[i])); + } + + gtk_widget_show_all (scrolled); + } + + if (!gtk_widget_get_visible (window)) + gtk_widget_show (window); + else + gtk_widget_destroy (window); + + return window; +} -- 2.30.2